package org.tspec.closure;

import org.tspec.dom.Scenario;
import org.tspec.dom.Story;

import groovy.lang.Closure;

public class ScenarioClosure extends Closure {

	private Scenario scenario;

	public ScenarioClosure(Object owner) {
		super(owner);
	}
	
	private void bind(Closure body) {
		body.setProperty("กำหนดให้", new GivenClosure(this));
		body.setProperty("เมื่อ", new WhenClosure(this));
		body.setProperty("แล้วควร", new ThenClosure("แล้วควร", this));
		body.setProperty("แล้ว", new ThenClosure("แล้ว", this));
		body.setProperty("และควร", new AndThenClosure("และควร", this));		
		body.setProperty("และ", new AndThenClosure("และ", this));		
		body.setProperty("และเมื่อ", new AndThenClosure("และเมื่อ", this));		
	}
	
	public Story doCall(String name, Closure body) {
		this.scenario = new Scenario();
		this.scenario.setName(name);
		((Story)this.getDelegate()).addScenario(this.scenario);
		bind(body);
		body.call();
		return (Story)this.getDelegate();
	}

	public Scenario getScenario() {
		return this.scenario;
	}

}
